#ifndef __FLYSKY_H__  
#define __FLYSKY_H__

#include "main.h"
#include "user_lib.h"
#include "dr16.hpp"
#include <hardware_config.h>


#define FS_RECEIVE_SIZE 46    // DMA 接收长度
#define FS_EVENT_ONLINE 0x02  // 遥控器在线事件

#define SBUS_HEAD 0X0F
#define SBUS_END 0X00

typedef struct {
    uint16_t online;

    int16_t ch[10];
	
		int16_t left_x;
    int16_t left_y;
    int16_t right_x;
    int16_t right_y;
		
		uint16_t vra;
    uint16_t vrb;
	
		uint16_t	 swa;
		uint16_t	 swb;
		uint16_t	 swc;
		uint16_t	 swd;
} __FS_RC;


class FLYSKY {
   public:
    FLYSKY(void);

    void 			init(void);
    void 			decode(void);
    void 			reset(void);
    void 			debug(void);
		__RC 			get_fs_rc(void);
		__FS_RC   get_fs_orin(void);   // 10通道原数据


    UART_HandleTypeDef *huart_;                            // 遥控器接收端串口
    rt_err_t            event_recv(void);                  // 遥控器离线事件
    static void         fs_thread_entry(void *parameter);  // 遥控器离线检测线程函数
    rt_thread_t         fs_thread;                         // 遥控器离线检测线程
    rt_event_t          event;                             // 遥控器在线事件
    uint8_t             data[46];                          // 遥控器缓存数据
		void								fs_to_dr16(void);                  // 整理为dr16格式

    __FS_RC           remoter;  //遥控器数据
	  __RC                rc_;  //dr16格式
	 
};  //接收机

extern FLYSKY flysky;


#endif /*__FLYSKY_H__ */
